#ifndef SYMBOLEVALUE_H
#define SYMBOLEVALUE_H

#include <string.h>
#include <iostream>
using namespace std;

#include "Symbole.h"
#include "Arbre.h"

class SymboleValue : public Symbole, // un symbole valué est un symbole qui a une valeur, définie ou pas
public Noeud { // et c'est aussi une feuille de l'arbre abstrait
public:
    SymboleValue(Symbole s); // construit un symbole valué à partir d'un symbole existant s

    ~SymboleValue() {
    }
    void afficher(unsigned short indentation = 0); // affiche le symbole en tant que noeud de l'arbre

    inline Valeur* getValeur() {
        return valeur;
    } // accesseur

    inline void setValeur(Valeur* valeur) {
        this->valeur = valeur;
        defini = true;
    } // accesseur

    inline bool estDefini() {
        return defini;
    } // accesseur

    void afficherEnC(unsigned short indentation = 0) {
        indentation = indentation;
        cout << this->getChaine();
    } // traduction en C

    friend ostream & operator <<(ostream & cout, SymboleValue symb); // affiche un symbole value sur cout

private:
    bool defini; // indique si la valeur du symbole est définie
    Valeur* valeur; // valeur du symbole si elle est définie, zéro sinon

};

#endif /* SYMBOLEVALUE_H */
